---
sidebar_position: 3.4
description: 服务异常是生产环境中再正常不过的情况，轻则一行error log，重则引发服务雪崩，把上下游的服务集群一波团灭。
---

import Highlight from "@site/src/components/Highlight";
import P from "@site/src/components/P";

# Hystrix
## 分布式系统的问题
复杂分布式体系结构中的应用程序有数十个依赖关系，每个依赖关系在某些时候将不可避免的失败！
## 服务学崩
多个微服务之间调用的时候，假设微服务A调用微服务B和微服务C，微服务B和微服务C又调用其他的微服务，这就是所谓的“扇出”，如果扇出的链路上某个微服务的调用响应时间过长或者不可用，
对微服务A调用就会占用越来越多的系统资源，进而引起系统奔溃，这就是所谓的“雪崩效应”。

对于高流量的应用来说，单一的后端依赖可能会导致所有服务器上的所有资源在几秒钟内饱和。比失败更糟糕的是，这些应用程序还可能导致服务之间的延迟增加，备份队列，线程和其它资源紧张，导致整个系统发生更多的级联故障，这些都表示需要对故障和
延迟进行隔离和管理，以便单个依赖关系的失败，不能取消整个应用程序或系统。


## 什么是Hysstrix
<P>Hystrix是一个用于处理分布式系统的延迟和容错的开源库，在分布式系统里，许多依赖不可避免的会调用失败，比如超时、异常等。Hystrix能够保证在一个依赖出问题的情况下，不会导致服务整体失败，避免级联故障，以提高分布式系统的弹性。</P>

<P>“断路器” 本身是一种装置开关，当某个服务单元发生故障之后，通过断路器的故障检测（类似熔断保险丝），<b>向调用方法返回一个服务预期的，可处理的备选响应（FallBack），而不是长时间的等待或抛出调用方法无法处理的异常，这样就可以保证
    了服务调用方的线程不会被长时间不必要的占用</b>，从而避免了故障在分布式系统中的蔓延，乃至学崩</P>

### 作用
* 服务降级
* 服务熔断
* 服务限流
* 接近实时的监控
* ……
### 服务熔断
<P>熔断机制是对雪崩效应的一种微服务链路保护机制。</P>
<P>当扇出链路的某个微服务不可用或者响应时间太长时，会进行服务的降级，<Highlight code="#1877F2">进而熔断该节点微服务的模块，快速返回错误的响应信息。</Highlight>
当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现，Hystrix会监控为服务间调用的状况，当失败的调用到达一定阈值，缺省时5秒内20次调用失败
就会启动熔断机制。熔断机制的注解是 @HystrixCommand
</P>
服务端：某个服务超时或者异常，引起熔断，直到这个服务恢复
### 服务降级
客户端：从整体网站请求负载考虑，当某个服务熔断或者关闭之后，服务将不在被调用